// import { createApp } from 'vue'
const { createApp } = Vue

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import 'element-plus/theme-chalk/display.css'
import scui from './scui'
import i18n from './locales'
import router from './router'
import store from './store'
import App from './App.vue'

import './utils/global'

import VxeUI from 'vxe-pc-ui'
import 'vxe-pc-ui/lib/style.css'

import VxeTable from 'vxe-table'
import 'vxe-table/lib/style.css'

import VxeUIPluginExportXLSX from '@vxe-ui/plugin-export-xlsx'
import ExcelJS from 'exceljs'
VxeTable.use(VxeUIPluginExportXLSX, {
  ExcelJS
})

// TODO
window.currentUser = {
  id: '1001',
  company: {
    id: 0
  }
}
// 模拟查询接口
const findCustomSetting = (id) => {
  return new Promise(resolve => {
    setTimeout(() => {
      try {
        if (sessionStorage.getItem(id)) {
          console.log('--------findCustomSetting', JSON.parse(sessionStorage.getItem(id) || ''))
          resolve(JSON.parse(sessionStorage.getItem(id) || ''))
          // VxeUI.modal.message({
          //   status: 'success',
          //   content: '异步还原用户个性化数据成功'
          // })
        } else {
          resolve({})
        }
      } catch (e) {
        resolve({})
      }
    }, 500)
  })
}
// 模拟保存接口
const saveCustomSetting = (id, storeData) => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('==================saveCustomSetting', storeData)
      sessionStorage.setItem(id, JSON.stringify(storeData))
      // VxeUI.modal.message({
      //   status: 'success',
      //   content: '保存用户个性化数据成功'
      // })
      resolve()
    }, 200)
  })
}

// 旧版本使用 setup({}) 或者 config({})
VxeTable.setConfig({
  size: null, // 全局尺寸
  // zIndex: 999, // 全局 zIndex 起始值，如果项目的的 z-index 样式值过大时就需要跟随设置更大，避免被遮挡；新版本可以使用 dom-zindex 共享配置
  // version: 1, // 版本号，对于某些带数据缓存的功能有用到，上升版本号可以用于重置数据
  // emptyCell: '',

  table: {
    fit: true,
    showHeader: true,
    animat: true,
    delayHover: 250,
    autoResize: true,
    minHeight: 144,
    headerAlign: "center",

    // keepSource: false,
    showOverflow: 'tooltip',
    showHeaderOverflow: 'tooltip',
    //showFooterOverflow: 'title',
    // resizeInterval: 500,
    // size: null,
    // zIndex: null,
    // stripe: false,
    border: true,
    // round: false,
    // emptyText: '暂无数据',
    // emptyRender: {
    //   name: ''
    // },
    rowConfig: {
      keyField: '_X_ROW_KEY', // 行数据的唯一主键字段名，必须设置，随时都可能会被改变
      isCurrent: true,
      isHover: true
    },
    resizeConfig: {
      refreshDelay: 250
    },
    radioConfig: {
      // trigger: 'default'
      strict: true
    },
    checkboxConfig: {
      // trigger: 'default',
      strict: true
    },
    tooltipConfig: {
      enterable: true
    },
    validConfig: {
      showMessage: true,
      autoClear: true,
      autoPos: true,
      message: 'inline',
      msgMode: 'single'
    },
    columnConfig: {
      // maxFixedSize: 4,
      resizable: true,
      drag: true,
      isHover: true
    },
    // menuConfig: {
    //   visibleMethod () {}
    // },
    customConfig: {
      enabled: true,
      allowVisible: true,
      allowResizable: true,
      allowFixed: true,
      allowSort: true,
      showFooter: true,
      placement: 'top-right',
      storage: true,
      checkMethod: ({ column }) => column.title !== '操作',
      restoreStore ({ id }) {
        return findCustomSetting(id)
      },
      updateStore ({ id, storeData }) {
        // 模拟异步，实现服务端保存
        return saveCustomSetting(id, storeData)
      },
      // mode: 'drawer',
      //  checkMethod () {},
      modalOptions: {
        showMaximize: true,
        mask: true,
        lockView: true,
        resize: true,
        escClosable: true
      }
    },
    sortConfig: {
      // remote: false,
      // trigger: 'default',
      // orders: ['asc', 'desc', null],
      // sortMethod: null,
      showIcon: true,
      iconLayout: 'vertical'
    },
    filterConfig: {
      // remote: false,
      // filterMethod: null,
      showIcon: true
    },
    expandConfig: {
      // trigger: 'default',
      showIcon: true
    },
    editConfig: {
      // mode: 'cell',
      showIcon: true,
      showAsterisk: true
    },
    importConfig: {
      _typeMaps: {
        csv: 1,
        html: 1,
        xml: 1,
        txt: 1
      }
    },
    exportConfig: {
      type: 'xlsx'
      // _typeMaps: {
      //   csv: 1,
      //   html: 1,
      //   xml: 1,
      //   txt: 1
      // }
    },
    printConfig: {
    },
    mouseConfig: {
      extension: true
    },
    keyboardConfig: {
      isEsc: true
    },
    areaConfig: {
      autoClear: true,
      selectCellByHeader: true
    },
    clipConfig: {
      isCopy: true,
      isCut: true,
      isPaste: true
    },
    fnrConfig: {
      isFind: true,
      isReplace: true
    },
    scrollX: {
      // enabled: false,
      gt: 60
      // oSize: 0
    },
    scrollY: {
      // enabled: false,
      gt: 100
      // oSize: 0
    }
  },
  // export: {
  //   types: {}
  // },
  grid: {
    // size: null,
    // zoomConfig: {
    //   escRestore: true
    // },
    formConfig: {
      enabled: true
    },
    pagerConfig: {
      enabled: true
      // perfect: false
    },
    toolbarConfig: {
      enabled: true
      // perfect: false
    },
    proxyConfig: {
      enabled: true,
      autoLoad: true,
      message: true,
      props: {
        list: null,
        result: 'result',
        total: 'page.total',
        message: 'message'
      }
      // beforeItem: null,
      // beforeColumn: null,
      // beforeQuery: null,
      // afterQuery: null,
      // beforeDelete: null,
      // afterDelete: null,
      // beforeSave: null,
      // afterSave: null
    }
  },
  toolbar: {
    // size: null,
    // import: {
    //   mode: 'covering'
    // },
    // export: {
    //   types: ['csv', 'html', 'xml', 'txt']
    // },
    // buttons: []
  }
})

const app = createApp(App);

app.use(store);
app.use(router);
app.use(ElementPlus);
app.use(i18n);
app.use(scui);
app.use(VxeUI);
app.use(VxeTable);

// import '../public/lib/code-generator/vue-codegenerator-v3.css'
// import VueCodegeneratorV3 from '../public/lib/code-generator/vue-codegenerator-v3.umd.js'
// app.use(VueCodegeneratorV3)


//挂载app
app.mount('#app');

window.VM = app
